Bộ nhớ ảo Các kiểu bộ nhớ

Bộ nhớ ảo là bộ đệm trong máy tính giúp máy tính chạy nhanh hơn giống như bộ đệm. Nhờ bộ nhớ ảo mà RAM có thể sử dụng tốt hơn, chạy ứng dụng nặng. Phân trang trên 1 vùng đĩa cứng để lưu dữ liệu đã xử lý, giảm gánh nặng cho RAM. Ghi nhớ rằng địa chỉ của các thanh ghi phải được chuyển qua bộ đệm để CPU xử lý.

Một số thuật ngữ:

  • Địa chỉ Ảo: Địa chỉ logictiến trình dùng.
  • Địa chỉ Vật lý: Địa chỉ thật sự trên RAM.
  • Ánh xạ: Chuyển từ những địa chỉ ảo sang địa chỉ thật, gần giống với ánh xạ bộ nhớ đệm.
  • Khung phân trang: Những trang kích thước bằng nhau được chia ra từ bộ nhớ chính.
  • Trang: Những đoạn nhớ trong bộ nhớ ảo lưu trên đĩa cứng.
  • Phân Trang: Tiến trình sao lưu trang ảo từ đĩa cứng vào khung trang trong bộ nhớ chính.
  • Phân mảnh: Bộ nhớ trở nên không cần thiết.
  • Sai sót trang: 1 sự kiện xảy ra khi trang yêu cầu không có trong bộ nhớ chính và phải copy từ đĩa cứng vào bộ nhớ chính.

Phân Trang

Ý tưởng khá đơn giản: Khởi tạo vùng nhớ trên bộ nhớ vật lý để xử lý, lưu giữ thông tin trong một bảng. Mỗi tiến trình đều có một bảng riêng gồm N dòng, N là số trang ảo mà tiến trình cần. Mỗi trang có 2 thuộc tính: bit và số trang. Trang ảo cùng kích cỡ với trang vật lý. Bộ nhớ tiến trình được chia thành những trang cùng kích cỡ cố định lưu giữ thông tin tiến trình để xử lý.
Các bước truy cập địa chỉ ảo:

  • Trích số trang, offset từ địa chỉ ảo. Dịch số trang sang bộ nhớ thực bằng cách truy suất bảng trang.
  • Tìm kiếm số trang trong bảng trang.
  • Kiểm tra bit của trang đó. Nếu bit = 0, hệ thống tự sinh ra 1 trang lỗi và hệ điều hành phải tìm được trang được đề nghị trên đĩa tron cây khung trang.
  • Sao lưu và cập nhật lại bảng trang trong bộ nhớ chính.
  • Nếu bit=1 tức là trang trong bộ nhớ chính.
  • Thay thế số trang ảo bằng số trang thực.
  • Truy xuất dữ liệu ở trang vậy lý thực và điền vào trang ảo Địa chỉ ảo gồm 8 bit và chia thành 2 trường. Bộ nhớ chính có 4 trang, bộ nhớ ảo ánh xạ lên bộ nhớ chính.

Các trang trong bảng trang được đánh dấu trong khung trang theo bit mà bộ nhớ ảo ánh xạ vào.

Vd: bit 0 bộ nhớ ảo ánh xạ vào bit 2 bộ nhớ thực. Khung trang số 2 được điền vào bảng trang, do nó tồn tại trên bộ nhớ chính nên bit được ghi là 1. 3 bit đầu trong 8 bit bộ nhớ ảo dành cho số trang. 5 bit sau dành cho offset được tính theo số bù 2 được ghi vào thanh ghi cơ sở.Vd: 000 01101 = #13. Địa chỉ 0 của tiến trình chứa dữ liệu A được ánh xạ qua bộ nhớ chính tại bit thứ 4. CPU sẽ phải chuyển từ địa chỉ ảo 0 sang địa chỉ vật lý 4.

Bảng trang lưu khung trang được ánh xạ từ các bít địa chỉ từ bộ nhớ ảo sang bộ nhớ chính:vd trang 0 ánh xạ sang trang 2,bit trong bảng trang là 1 (do trên bộ nhớ vật lý). Ánh xạ thanh ghi 4 bits từ bộ nhớ ảo sang bộ nhớ chính.

Vd: 1010 trang thứ 6 trong bộ nhớ ảo sang khung trang thứ 3 trong bộ nhớ chính. 1 địa chỉ ảo có 13 bits, 3 bits đầu dành cho số trang và 10 bits sau cho offset. 1 địa chỉ thực có 12 bits, 2 bits đầu là khung trang trong bộ nhớ chính, 10 bits sau cho offset. Khung trang càng lớn thì bảng trang càng ít nhưng sẽ lãng phí bộ nhớ nếu quá lớn.

Thời gian truy xuất phân trang

EAT = Effective Access Time. Chúng ta cần thanh ghi EAT khi sử dụng bộ nhớ ảo. Khi 2 vùng nhớ vật lý được truy suất, 1 tham chiếu tới bảng trang, 1 tham chiếu đến dữ liệu mong muốn. Giả sử bộ nhớ chính truy suất cần 200ns và tỷ lệ lỗi khung trang là 1%, 99% còn lại ta tìm được trang cần trong bộ nhớ. Cần 10ms để truy suất 1 trang không có trong bộ nhớ bao gồm chuyển trang, cập nhật trang và truy suất dữ liệu. EAT =.99(200ns + 200ns) +.01(10ms) = 13.960ns. Thậm chí nếu 100% trang ở trong bộ nhớ chính thì: EAT = 1.00(200ns + 200ns) = 400ns.

Truy xuất bảng trang phải chi phí thời gian truy suất bộ nhớ chính vì nó được lưu trên bộ nhớ chính Có thể làm tăng tốc độ nhờ tìm kiếm bảng trang nhờ bộ đệm chuyển đổi translation look-aside buffer – bộ đệm chuyển đổi.

Các bước là: tìm số trang, offset từ địa chỉ ảo, tìm số trang ảo trong TLB, nếu thấy thì điền offset vào khung trang vật lý và truy suất vùng nhớ. Nếu không thấy thì qua bảng trang tìm kiếm trong bộ nhớ chính, nếu không có trong bộ nhớ chính tạo trang lỗi và khởi động lại khi trang đó được tìm thấy.

Kết hợp bộ đệm, tìm kiếm bộ đệm, phân trang

Bởi vì một bảng tìm kiếm bộ đệm có thể gây lẫn lộn, đưa nhiều thông tin gây nhầm lẫn. Giải pháp là tập hợp tất cả các phương pháp lại. Khi CPU tạo ra 1 địa chỉ nó là địa chỉ chương trình hoặc là địa chỉ ảo, địa chỉ ảo này phải được chuyển thành địa chỉ thật trước khi nó được sử dụng. Có 2 cách: sử dụng bảng dịch tìm kiếm bộ đệm để tìm khung trang mới được lưu trữ bao gồm số trang, khung trang. Nếu khung trang bị bỏ lỡ thì có thể dùng bảng trang để tìm khung trang tương ứng trong bộ nhớ chính. Số khung trang này sau đó sẽ được kết hợp với offset trong địa chỉ ảo để tạo ra địa chỉ thật.

Có hai khả năng để lấy dữ liệ

  1. Tìm kiếm để xem có bộ nhớ cache dữ liệu.
  2. Trên một bộ nhớ cache bỏ lỡ, hãy vào phần chính của bộ nhớ vị trí khác để lấy lại dữ liệu (thường bộ nhớ đệm được cập nhật vào thời điểm này là tốt nhất).

Thuận lợi, khó khăn của phân trang, bộ nhớ ảo

Trong Phần "Thời gian truy suất phân trang", chúng tôi đã thảo luận cách thức triển khai thực hiện thông qua bộ phân trang. Cho biết thêm một tham chiếu bộ nhớ khi truy cập vào dữ liệu. Tuy nhiên, ngay cả với một tỉ lệ cao nhấn trong bộ đệm chuyển đổi, quá trình này vẫn còn dịch phí.
Bất lợi khác của bộ nhớ ảo và phân trang là tiêu tốn tài nguyên hơn (bộ nhớ để lưu trữ trên trang bảng). Trong trường hợp (nhiều chương trình chạy 1 lúc), các bảng trang có thể mất một phần của bộ nhớ vật lý. Bộ nhớ ảo yêu cầu phần cứng và hệ điều hành hỗ trợ.

Lợi ích của sử dụng bộ nhớ ảo phải lớn hơn bất lợi trong việc sử dụng hệ thống máy tính.Đơn giản là chương trình không còn bị giới hạn bởi các số lượng bộ nhớ vật lý có sẵn. Bộ nhớ ảo cho phép chúng ta chạy các chương trình cá nhân thứ mà địa chỉ ảo lớn hơn địa chỉ vật lý (Trong thực tế, một trong những quá trình này cho phép chia sẻ bộ nhớ vật lý với chính nó). Làm cho nó dễ dàng hơn nhiều để viết các chương trình do các lập trình viên không còn có thể lo lắng về các địa chỉ vật lý không gian hạn chế.

Bởi vì mỗi chương trình đòi hỏi ít bộ nhớ vật lý, bộ nhớ ảo cũng cho phép các chương trình cùng một lúc. Điều này cho phép chúng ta chia sẻ các máy tính trong quá trình có tổng số địa chỉ không gian kích thước vượt quá kích thước bộ nhớ vật lý, dẫn đến tăng sử dụng CPU và hệ thống thông qua bộ nhớ ảo.

Phân đoạn

Phân trang là phương thức quản lý bộ nhớ phổ biến nhất nhưng vẫn còn các cách khác, tiêu biểu là phân đoạn. Thay vì chia địa chỉ ảo thành những trang kích thước bằng nhau, địa chỉ thật thành những khung trang, địa chỉ ảo được chia thành luận lý, đơn vị độ dài hoặc các đoạn.
Bộ nhớ vật lý không thật sự phân chia hoặc phân vùng. Khi 1 đoạn cần được đưa vào vùng nhớ chính, hệ điều hành sẽ tìm kiếm vùng nhớ trống đủ lớn để lưu thông tin phân đoạn đó. Mỗi phân đoạn có địa chỉ cơ sở, được tạo trong bộ nhớ, giới hạn kích cỡ.
Mỗi chương trình có thể có nhiều phân đoạn, bây giờ được kết hợp thành bảng phân đoạn thay bảng trang. Bảng phân đoạn đơn giản là tập hợp những cặp cơ sở cho mỗi phân đoạn. Bộ nhớ có thể truy xuất và phiên dịch bằng cách cung cấp một số vùng nhớ và offset trong phân đoạn. Kiểm tra lỗi được tổ chức để chắc chắn rằng Offset đảm bảo các giá trị ràng buộc. Nếu có, thì giá trị cơ sở cho phân đoạn(được tìm thấy trong bảng phân đoạn) sẽ được điền vào phần bù, nhường cho địa chỉ vật lý thật.

Giống như phân trang, phân đoạn cũng có những vùng nhớ phân mảng. Phân trang tạo ra những vùng nhớ đó vì khung trang có thể khởi tạo 1 tiến trình mà không cần những thuộc tính của khung trang. Phân đoạn lại khác, chứa những phân mảnh ở ngoài. Những phân đoạn được tạo và hủy, những vùng nhớ được giải phóng và chuẩn hóa lại dẫn đến lỗi trong bộ nhớ. Thực tế có rất nhiều vùng nhớ nhỏ nhưng không đủ lớn để lưu các thuộc tính của phân đoạn.

Sự khác biệt giữa phân mảnh trong và ngoài là với phân mảng ngoài, có đủ không gian nhớ để lưu trữ cho tiến trình, nhưng không gian này không liền kề nhau mà là số lượng lớn của nhiều không gian nhỏ, những lỗ hổng không được sử dụng. Với phân mảnh trong, bộ nhớ đơn giản là không tồn tại bởi vì hệ thống đã khởi tạo quá nhiều vùng nhớ cho 1 tiến trình mà nó không cần thiết. Để loại bỏ phân mảnh ngoài, hệ thống sử dụng bộ thu dọn rác. Tiến trình này đơn giản loại bỏ những vùng nhớ chiếm đóng để chúng nhỏ hơn, phân mảnh lại thành lớn hơn và có tác dụng hơn.

Sự kết hợp giữa phân đoạn và phân trang rất tiện ích bởi vì nó cho phép các phân đoạn từ phía người dùng và phân trang từ phía hệ thống.

Tổng quan bộ nhớ ảo

Bộ nhớ bao gồm: bộ đệm, bộ nhớ chính và bộ nhớ ảo trên đĩa cứng. Bộ đệm lưu trữ những thông tin thường xuyên sử dụng của vùng nhớ chính để CPU xử lý. Bộ đệm có thể dùng nhiều cách ánh xạ, theo cơ chế FIFO, LRU(rất tốt cho ứng dụng nhưng khó bổ sung). Một biện pháp thành công khác là dùng bộ nhớ ảo, bộ nhớ ảo cho phép chạy những chương trình mà địa chỉ ảo cần thiết lớn hơn địa chỉ thật. Cho phép nhiều tiến trình chạy cùng 1 lúc. Trong đó TLB được dùng để lưu trữ những cặp địa chỉ ảo/thật được sử dụng. Bộ nhớ ảo chuyển đổi từ địa chỉ ảo sang địa chỉ thật, xử lý những trang lỗi trên đĩa thay vì bộ nhớ chính.
Mối quan hệ giữa bộ nhớ chính và bộ nhớ ảo gần giống với quan hệ giữa bộ nhớ chính và bộ đệm. Thực tế TLB là bộ đệm. Một điều quan trọng để nhận thấy là địa chỉ ảo phải được chuyển dịch sang địa chỉ vật lý trước khi làm bất cứ việc gì và đó là việc mà TLB làm. Mặc dù bộ đệm và phân trang vùng nhớ gần giống nhau nhưng các đối tượng lại khác nhau. Bộ đệm tăng khả năng truy suất bộ nhớ chính trong khi đó bộ nhớ ngoài tăng kích cỡ bộ nhớ chính.

Tài liệu tham khảo

WikiPedia: Các kiểu bộ nhớ http://computerscience.jbpub.com/ecoa/2e/Null06.pd... http://www.pcguide.com/ref/ram/techDRDRAM-c.html http://www.pcguide.com/ref/ram/techEDO-c.html http://www.pcguide.com/ref/ram/techFPM-c.html http://www.pcguide.com/ref/ram/techSLDRAM-c.html http://www.pcguide.com/ref/video/techMDRAM-c.html http://en.wikipedia.org/wiki/DDR_SDRAM http://en.wikipedia.org/wiki/EPROM http://en.wikipedia.org/wiki/Flash_memory http://en.wikipedia.org/wiki/SDRAM